import $app from "../$app";
import $store from '@/store';

//工具类
export default {

	//删除素组里，指定的东西
	arrayDelOne: (arr, num) => arr.filter((obj, i) => i != num),
	
	/**
	 * js 数组删除指定 元素
	* team 数组
	* one 大个元素
	* 使用例子: arrayRemove(team,team[i])
	* 并且改变了team的原型
	 **/
	arrayRemove(team, one) {
		Array.prototype.indexOf = function (val) { //prototype 给数组添加属性
			for (var i = 0; i < this.length; i++) { //this是指向数组，this.length指的数组类元素的数量
				if (this[i] == val) return i; //数组中元素等于传入的参数，i是下标，如果存在，就将i返回
			}
			return -1;
		};
		Array.prototype.remove = function (val) {  //prototype 给数组添加属性
			var index = this.indexOf(val); //调用index()函数获取查找的返回值
			if (index > -1) {
				this.splice(index, 1); //利用splice()函数删除指定元素，splice() 方法用于插入、删除或替换数组的元素
			}
		}

		team.remove(one);
		return team;
	},



	//判断 苹果/安卓
	isApple() {
		let judge;
		//true苹果/false安卓
		(/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) ? judge = true : judge = false;
		return judge;
	},

	// 判断数据是否存在：空对象，null，undefined，空数组，字符串，数字，0 全兼容
	judgeData(data) {
		let judge;
		if (typeof data === 'number') {
			judge = !!data;
		} else if (typeof data === 'boolean') {
			judge = data;
		} else if (typeof data === 'object') {
			//转成数组再判断
			if (data instanceof File) {
				judge = true;
			} else {
				(!!$app.objToArray(1, data).length) ? judge = true : judge = false;
			}
		} else {
			(data && data.length) ? judge = true : judge = false;
		}
		return judge;
	},

	//对象转数组 num：1键/2值
	objToArray(num, data) {
		let out = '';
		if (!!data) {
			if (num == 1) { //取键
				out = Object.keys(data);
			} else if (num == 2) { //取值
				out = Object.values(data);
			}
		} else {
			out = []
		}
		return out;
	},

	//关闭当前浏览器页面
	closeWindowPage() {
		if (window.navigator.userAgent.indexOf("Firefox") != -1 || window.navigator.userAgent.indexOf("Chrome") != -1) {
			window.location.href = "about:blank";
			window.close();
		} else {
			window.opener = null;
			window.open("", "_self");
			window.close();
		}
	},


	//获取随机数
	getRandomNum(Min, Max) {
		let Range = Max - Min;
		let Rand = Math.random();
		return (Min + Math.round(Rand * Range));
	},

	//强制性转成JSON对象
	anyToJSON(obj) {
		if (typeof obj === 'object') {
			return obj;
		} else if (typeof obj === 'string') {
			return JSON.parse(obj);
		}
	},
	//数组 转 字符串
	arrayToStr(arr) {
		if ($app.judgeData(arr)) {
			return arr.join(',');
		} else {
			return false;
		}
	},
	/**
	   * 数组 最小值 计算
	   **/
	arrayMin(team) {
		return Math.min.apply(Math, team);
	},

	/**
	 * 数组 最大值 计算
	 **/
	arrayMax(team) {
		return Math.max.apply(Math, team);
	},
	/**
	 * 正整数 正则验证 最好和 type="number" 配合使用
	 **/
	numPlus(num) {
		let judge = false;
		let str = num.toString();
		if ((str.slice(0, 1) != 0) && parseInt(num) != 0) {
			judge = /^\d+$/.test(num);
		}

		return judge;
	},
	/**
	 * 身份证 正则验证
	 **/
	idCardCheck(num) {
		return /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(num);
	},
	/**
	 * 邮箱 正则验证
	 **/
	mailCheck(num) {
		return /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(num);
	},
	/**
	 * 固话 正则验证 010-22223333
	 **/
	homeTelCheck(num) {
		return /^\d{3}-\d{8}|\d{3}-\d{7}|\d{4}-\d{7}|\d{4}-\d{8}/.test(num);
	},

	/**
	 * 手机 正则验证
	 **/
	telCheck(num) {
		return /^1[1234567890]\d{9}$/.test(parseInt(num));
	},
	/**
	 * 银行卡 正则验证
	 **/
	bankcardCheck(num) {
		return /^([1-9]{1})(\d{15}|\d{18})$/.test(parseInt(num));
	},
	/**
	 * 车牌号 正则验证
	 **/
	carNumCheck(num) {
		return /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}/.test(num);
	},
	/**
	 * qq号 正则验证
	 **/
	qqCheck(num) {
		return /^[1-9][0-9]{4,9}$/gim.test(num);
	},
	/**
	 * mac地址 正则验证
	 **/
	macCheck(num) {
		return /[A-F\d]{2}:[A-F\d]{2}:[A-F\d]{2}:[A-F\d]{2}:[A-F\d]{2}:[A-F\d]{2}/.test(num);
	},

	//取文件后缀名
	toLower(nameObj) {
		let out = '';

		let name_fileUrl=$app.getVal_fileUrl(nameObj);
		let name_filePath=$app.getVal_filePath(nameObj);
		let name=name_fileUrl||name_filePath;

		if($app.judgeData(name)){
			let xu = name.lastIndexOf("\.");
			

			if (xu > -1) {//有
				out = (name.slice(xu + 1)).toLowerCase();//去掉尾巴的后缀名，转成小写
			} else {//没有
				out = name;
			}
		}

		return out;
	},

	//去除文件名后缀
	deleJHz(nameObj) {
		let out = '';
		
		let name_fileUrl=$app.getVal_fileUrl(nameObj);
		let name_filePath=$app.getVal_filePath(nameObj);
		let name=name_fileUrl||name_filePath;
		if($app.judgeData(name)){
			let xu = name.lastIndexOf('\.');
			
			if (xu > -1) {//有
				out = name.slice(0, xu);
			} else {//没有
				out = name;
			}
		}
		return out;
	},

	// 文件大小控制
	fileSizeCheck(file, needSize, callBack) {
		if ($app.judgeData(needSize)) {//有值，进入该值判断
			if (file.size > (needSize * (1024 * 1024))) {
				$app.alert('请上传' + needSize + 'MB以下的文件', '上传失败');
			} else {
				callBack instanceof Function && callBack();
			}
		} else {//没值，进入全局判断
			let fileMaxSize30 = $app.fileMaxSize30();
			if (file.size > fileMaxSize30) {
				$app.alert('请上传' + fileMaxSize30 / (1024 * 1024) + 'MB以下的文件', '上传失败');
			} else {
				callBack instanceof Function && callBack();
			}
		}
	},

	//检查文件后缀名格式
	//needSize 为空、false、null，等否定意思，则进入全局性的文件大小判断
	//needSize 为输入数值，则进入该数值的文件大小判断
	suffix: {
		//图片格式检测
		//doIt,用于多文件循环判断的时候使用，单文件默认不填，多文件填true；
		jpgPng(e, file, needSize, callBack, doIt) {
			let string = $app.toLower(file.name); //取文件后后缀名

			let jud = /(jpeg|jpg|png)$/i.test(string);

			if (jud) {
				$app.fileSizeCheck(file, needSize, callBack);

			} else {
				$app.toast('请选择.jpg 或 .png格式文件', false);
			}

			//清空input file的值
			(!doIt) && (e.target.value = '');
		},
		//仅仅jpg图片检测
		//doIt,用于多文件循环判断的时候使用，单文件默认不填，多文件填true；
		justJpg(e, file, needSize, callBack, doIt) {
			let string = $app.toLower(file.name); //取文件后后缀名

			let jud = /(jpg)$/i.test(string);

			if (jud) {
				$app.fileSizeCheck(file, needSize, callBack);

			} else {
				$app.toast('请选择.jpg格式文件', false);
			}

			//清空input file的值
			(!doIt) && (e.target.value = '');
		},
		//压缩包
		zipRar(e, file, needSize, callBack, doIt) {
			let string = $app.toLower(file.name); //取文件后后缀名

			let jud = /(zip|rar)$/i.test(string);

			if (jud) {
				$app.fileSizeCheck(file, needSize, callBack);
			} else {
				$app.toast('请选择.zip 或 .rar格式文件', false);
			}

			//清空input file的值
			(!doIt) && (e.target.value = '');
		},
		//压缩包+word+pdf
		zipRarWordPdf(e, file, needSize, callBack, doIt) {
			let string = $app.toLower(file.name); //取文件后后缀名

			let jud = /(zip|rar|docx|doc|pdf)$/i.test(string);

			if (jud) {
				$app.fileSizeCheck(file, needSize, callBack);
			} else {
				$app.toast('请选择 压缩包 / word / pdf 格式文件', false);
			}

			//清空input file的值
			(!doIt) && (e.target.value = '');
		},
		//word文件
		word(e, file, needSize, callBack, doIt) {
			let string = $app.toLower(file.name); //取文件后后缀名

			let jud = /(docx|doc)$/i.test(string);

			if (jud) {
				$app.fileSizeCheck(file, needSize, callBack);
			} else {
				$app.toast('请选择.docx 或 .doc格式文件', false);
			}

			//清空input file的值
			(!doIt) && (e.target.value = '');
		},
		//word文件+pdf
		wp(e, file, needSize, callBack, doIt) {
			let string = $app.toLower(file.name); //取文件后后缀名

			let jud = /(docx|doc|pdf)$/i.test(string);

			if (jud) {
				$app.fileSizeCheck(file, needSize, callBack);
			} else {
				$app.toast('请选择.docx .doc 或 .pdf格式文件', false);
			}

			//清空input file的值
			(!doIt) && (e.target.value = '');
		},
		//仅仅doc
		docJust(e, file, needSize, callBack, doIt) {
			let string = $app.toLower(file.name); //取文件后后缀名

			let jud = /(doc)$/i.test(string);

			if (jud) {
				$app.fileSizeCheck(file, needSize, callBack);
			} else {
				$app.toast('请选择.doc格式文件', false);
			}

			//清空input file的值
			(!doIt) && (e.target.value = '');
		},
		//pdf
		pdf(e, file, needSize, callBack, doIt) {
			let string = $app.toLower(file.name); //取文件后后缀名

			let jud = /(pdf)$/i.test(string);

			if (jud) {
				$app.fileSizeCheck(file, needSize, callBack);
			} else {
				$app.toast('请选择.pdf格式文件', false);
			}

			//清空input file的值
			(!doIt) && (e.target.value = '');
		},
		
		//pdf 或 图片 -商标上传-专用
		imgPdf_tm(e, file, needSize, callBack, doIt) {
			let string = $app.toLower(file.name); //取文件后后缀名

			let jud = /(pdf|jpeg|jpg|png)$/i.test(string);


			if (jud) {

				//1pdf,2图片
				let typeJ='';
				if (string == 'pdf') {
					typeJ=1;
				} else {
					typeJ=2;
				}

				$app.fileSizeCheck(file, needSize, () => {
					callBack instanceof Function && callBack(typeJ);
				});

			} else {
				$app.toast('请选择 jpg / png / pdf 格式文件', false);
			}

			//清空input file的值
			(!doIt) && (e.target.value = '');
		},
		//excel文件
		excel(e, file, needSize, callBack, doIt) {
			let string = $app.toLower(file.name); //取文件后后缀名

			let jud = /(xlsx|xls)$/i.test(string);

			if (jud) {
				$app.fileSizeCheck(file, needSize, callBack);
			} else {
				$app.toast('请选择.xlsx 或 .xls格式文件', false);
			}

			//清空input file的值
			(!doIt) && (e.target.value = '');
		},
	},


	//多文件后缀名循环
	suffixEach(e, callBack) {
		//批量文件上传 数组
		let files = e.target.files;//选中的文件

		let zS = parseInt(files.length);

		for (let i in files) {
			let file = files[i];

			if ($app.judgeData(file.size)) {

				callBack(file);

				//循环结束，到了最后的尾巴
				if (zS == (parseInt(i) + 1)) {
					// console.log('到了尾巴')
					e.target.value = '';//清空input file的值
				}
			}
		};
	},

	// 外观专利专用图片 size 判断，宽高不能大于1750x2500=>朱老师定
	WGZL_EachImg(file, success, fail) {

		let reader = new FileReader();
		reader.readAsDataURL(file);

		//读取文件=》用base64编码,
		reader.onload = (e)=>{
			let image = new Image();
			image.src = e.target.result;
			//获取编码后的值,也可以用this.result获取
			image.onload = ()=>{
				
				let drawWidth = image.naturalWidth;
				let drawHeight = image.naturalHeight;
				
				// 宽 或 高 任意数值 大于 朱老师给size 都不，给用户继续 imgWGZL_size=》[1750,2500]
				if (drawWidth > $app.imgWGZL_size[0] || drawHeight > $app.imgWGZL_size[1]) {
					$app.toast('外观专利图片尺寸过大', false, () => {
						fail(file);
					});
				} else {
					success(file);
				}
			}
		}
	},

	// 外观专利多图上传，并判断图片大小专用
	WGZL_EachImg_judge(e, success, ) {
		// 外观专利图片上传 专用
		$app.suffixEach(e, file => {
			//格式判断
			$app.suffix.justJpg(e, file, false, () => {

				// 外观专利图片判断，宽高不能大于1750x2500=>朱老师定
				$app.WGZL_EachImg(file, () => {
					//1营业执照,2专利文件,3身份证,4外观设计图片,5外观说明文件,6软著文件,7美术著作文件,8商标文件,
					//9商标导入文件-xls,10专利补正文件,11专利oa文件,12专利打包文件(zip/rar),13专利委托书,
					//14企业头像,15商标委托书,16商标注册个体户身份证,17商标注册企业营业执照(pdf),18专利oa时上传对照书(word)
					//19专利导入文件,20商标图片检索
					$ajax.upOther(file, 4, success);
				}, () => {
					$store.commit('upData_WGZL_size');
					
				});

			}, true);
		});
	},

	// 字符串截取，因为后台返回的字段 可能为空，空字符串使用slice会直接报错
	superSlice(str, a, b) {
		let out = '';
		let aNum = parseInt(a);
		if ($app.judgeData(str)) {
			let ok = str.toString();//再一次转字符串

			if ($app.judgeData(b)) {
				let bNum = parseInt(b);
				out = ok.slice(aNum, bNum)
			} else {
				out = ok.slice(aNum);
			}

		}
		return out;
	},

	// 兼容字符串 和 obj.file_url 格式
	getVal_fileUrl(nameObj){
		let name='';
		if(typeof nameObj === 'string'){
			name=nameObj;
		}else if(typeof nameObj === 'object'){
			if ($app.judgeData(nameObj)) name=nameObj.file_url;
		}
		
		return name;
	},
	// 兼容字符串 和 obj.file_path 格式
	getVal_filePath(nameObj){
		let name='';
		if(typeof nameObj === 'string'){
			name=nameObj;
		}else if(typeof nameObj === 'object'){
			if ($app.judgeData(nameObj)) name=nameObj.file_path;
		}
		
		return name;
	},
	// 输出数组 循环出 file_path 相对路径 ,提交后台
	filePath_forEach(obj){
		
		let owrB = [];
		obj.forEach((val, i) => {
			owrB.push($app.getVal_filePath(val));
		});
		return owrB;
		
	},


}; 